﻿using System;
using System.Collections.Generic;
using System.Text;

namespace BCDManager.Lib
{
	public static class Enumerations
	{
		/// <summary>
		/// Specifies the operating system loader element types.
		/// </summary>
		public enum BcdOSLoaderElementTypes : uint
		{
			/// <summary>
			/// The device on which the operating system resides. The element data format is BcdDeviceElement.
			/// </summary>
			BcdOSLoaderDevice_OSDevice                       = 0x21000001,
			/// <summary>
			/// The file path to the operating system (%SystemRoot% minus the volume.) The element data format is BcdStringElement.
			/// </summary>
			BcdOSLoaderString_SystemRoot                     = 0x22000002,
			/// <summary>
			/// The resume application associated with the operating system. The element data format is BcdObjectElement.
			/// </summary>
			BcdOSLoaderObject_AssociatedResumeObject         = 0x23000003,
			/// <summary>
			/// Indicates whether the operating system loader should determine the kernel and HAL to load based on the platform features. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderBoolean_DetectKernelAndHal            = 0x26000010,
			/// <summary>
			/// The kernel to be loaded by the operating system loader. This value overrides the default kernel. The element data format is BcdStringElement.
			/// </summary>
			BcdOSLoaderString_KernelPath                     = 0x22000011,
			/// <summary>
			/// The HAL to be loaded by the operating system loader. This value overrides the default HAL. The element data format is BcdStringElement.
			/// </summary>
			BcdOSLoaderString_HalPath                        = 0x22000012,
			/// <summary>
			/// The transport DLL to be loaded by the operating system loader. This value overrides the default Kdcom.dll. The element data format is BcdStringElement.
			/// </summary>
			BcdOSLoaderString_DbgTransportPath               = 0x22000013,
			/// <summary>
			/// The no-execute page protection policy. The element data format is BcdIntegerElement and the Integer property is one of the values from the BcdOSLoader_NxPolicy enumeration. If this value is not specified, the default is NxPolicyAlwaysOff.
			/// </summary>
			BcdOSLoaderInteger_NxPolicy                      = 0x25000020,
			/// <summary>
			/// The Physical Address Extension (PAE) policy. The element data format is BcdIntegerElement and the Integer property is one of the values from the BcdOSLoader_PAEPolicy enumeration. If this value is not specified, the default is PaePolicyDefault.
			/// </summary>
			BcdOSLoaderInteger_PAEPolicy                     = 0x25000021,
			/// <summary>
			/// Indicates that the system should be started in WinPE mode. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderBoolean_WinPEMode                     = 0x26000022,
			/// <summary>
			/// Indicates that the system should not automatically reboot when it crashes. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderBoolean_DisableCrashAutoReboot        = 0x26000024,
			/// <summary>
			/// Indicates that the system should use the last-known good settings. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderBoolean_UseLastGoodSettings           = 0x26000025,
			/// <summary>
			/// Indicates whether the test code signing certificate is supported. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderBoolean_AllowPrereleaseSignatures     = 0x26000027,
			/// <summary>
			/// Indicates whether the system should utilize the first 4GB of physical memory. This option requires 5GB of physical memory, and on x86 systems it requires PAE to be enabled. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderBoolean_NoLowMemory                   = 0x26000030,
			/// <summary>
			/// The amount of memory the system should ignore. The element data format is BcdIntegerElement.
			/// </summary>
			BcdOSLoaderInteger_RemoveMemory                  = 0x25000031,
			/// <summary>
			/// The amount of memory that should be utilized by the process address space, in bytes. This value should be between 2GB and 3GB. The element data format is BcdIntegerElement. Increasing this value from the default 2GB decreases the amount of virtual address space available to the system and device drivers.
			/// </summary>
			BcdOSLoaderInteger_IncreaseUserVa                = 0x25000032,
			/// <summary>
			/// Indicates whether the system should use the standard VGA display driver instead of a high-performance display driver. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderBoolean_UseVgaDriver                  = 0x26000040,
			/// <summary>
			/// Indicates whether the system should initialize the VGA driver responsible for displaying simple graphics during the boot process. If not, there is no display is presented during the boot process. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderBoolean_DisableBootDisplay            = 0x26000041,
			/// <summary>
			/// Indicates whether the VGA driver should avoid VESA BIOS calls. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderBoolean_DisableVesaBios               = 0x26000042,
			/// <summary>
			/// Indicates that cluster-mode APIC addressing should be utilized, and the value is the maximum number of processors per cluster. The element data format is BcdIntegerElement.
			/// </summary>
			BcdOSLoaderInteger_ClusterModeAddressing         = 0x25000050,
			/// <summary>
			/// Indicates whether to enable physical-destination mode for all APIC messages. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderBoolean_UsePhysicalDestination        = 0x26000051,
			/// <summary>
			/// The maximum number of APIC clusters that should be used by cluster-mode addressing. The element data format is BcdIntegerElement.
			/// </summary>
			BcdOSLoaderInteger_RestrictApicCluster           = 0x25000052,
			/// <summary>
			/// Indicates whether the operating system should initialize or start non-boot processors. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderBoolean_UseBootProcessorOnly          = 0x26000060,
			/// <summary>
			/// The maximum number of processors that can be utilized by the system; all other processors are ignored. The element data format is BcdIntegerElement.
			/// </summary>
			BcdOSLoaderInteger_NumberOfProcessors            = 0x25000061,
			/// <summary>
			/// Indicates whether the system should use the maximum number of processors. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderBoolean_ForceMaximumProcessors        = 0x26000062,
			/// <summary>
			/// Indicates whether processor specific configuration flags are to be used. The element data format is BcdIntegerElement.
			/// </summary>
			BcdOSLoaderBoolean_ProcessorConfigurationFlags   = 0x25000063,
			/// <summary>
			/// Indicates whether the system should use I/O and IRQ resources created by the system firmware instead of using dynamically configured resources. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderInteger_UseFirmwarePciSettings        = 0x26000070,
			/// <summary>
			/// The PCI Message Signaled Interrupt (MSI) policy. Zero (0) indicates default, and one (1) indicates that MSI interrupts are disabled. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderInteger_MsiPolicy                     = 0x26000071,
			/// <summary>
			/// The element data format is BcdIntegerElement and the Integer property is one of the values from the BcdLibrary_SafeBoot enumeration.
			/// </summary>
			BcdOSLoaderInteger_SafeBoot                      = 0x25000080,
			/// <summary>
			/// Indicates whether the system should use the shell specified under the following registry key instead of the default shell: HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\AlternateShell. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderBoolean_SafeBootAlternateShell        = 0x26000081,
			/// <summary>
			/// Indicates whether the system should write logging information to %SystemRoot%\Ntbtlog.txt during initialization. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderBoolean_BootLogInitialization         = 0x26000090,
			/// <summary>
			/// Indicates whether the system should display verbose information. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderBoolean_VerboseObjectLoadMode         = 0x26000091,
			/// <summary>
			/// Indicates whether the kernel debugger should be enabled using the settings in the inherited debugger object. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderBoolean_KernelDebuggerEnabled         = 0x260000a0,
			/// <summary>
			/// Indicates whether the HAL should call DbgBreakPoint at the start of HalInitSystem for phase 0 initialization of the kernel. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderBoolean_DebuggerHalBreakpoint         = 0x260000a1,
			/// <summary>
			/// Indicates whether EMS should be enabled in the kernel. The element data format is BcdBooleanElement.
			/// </summary>
			BcdOSLoaderBoolean_EmsEnabled                    = 0x260000b0,
			/// <summary>
			/// Indicates the driver load failure policy. Zerp (0) indicates that a failed driver load is fatal and the boot will not continue, one (1) indicates that the standard error control is used. The element data format is BcdIntegerElement.
			/// </summary>
			BcdOSLoaderInteger_DriverLoadFailurePolicy       = 0x250000c1,
			/// <summary>
			/// The boot status policy. The element data format is BcdIntegerElement.
			/// Term										Description
			/// BootStatusPolicyDisplayAllFailures (0)		Display all boot failures.
			/// BootStatusPolicyIgnoreAllFailures (1)		Ignore all boot failures.
			/// BootStatusPolicyIgnoreShutdownFailures (2)	Ignore all shutdown failures.
			/// BootStatusPolicyIgnoreBootFailures (3)		Ignore all boot failures.
			/// </summary>
			BcdOSLoaderInteger_BootStatusPolicy              = 0x250000E0 
		}

		/// <summary>
		/// Specifies the boot manager element types. For more details on the layout of this enumeration, see BcdElementType.
		/// </summary>
		public enum BcdBootMgrElementTypes : uint
		{
			/// <summary>
			/// The order in which BCD objects should be displayed. Objects are displayed using the string specified by the BcdLibraryString_Description element. The element data format is BcdObjectListElement.
			/// </summary>
			BcdBootMgrObjectList_DisplayOrder = 0x24000001,
			/// <summary>
			/// List of boot environment applications the boot manager should execute. The applications are executed in the order they appear in this list. The element data format is BcdObjectListElement. If the firmware boot manager does not support loading multiple applications, this list cannot contain more than one entry.
			/// </summary>
			BcdBootMgrObjectList_BootSequence = 0x24000002,
			/// <summary>
			/// The default boot environment application to load if the user does not select one. The element data format is BcdObjectElement.
			/// </summary>
			BcdBootMgrObject_DefaultObject = 0x23000003,
			/// <summary>
			/// The maximum number of seconds a boot selection menu is to be displayed to the user. The menu is displayed until the user selects an option or the time-out expires. The element data format is BcdIntegerElement. If this value is not specified, the boot manager waits for the user to make a selection.
			/// </summary>
			BcdBootMgrInteger_Timeout = 0x25000004,
			/// <summary>
			/// Indicates that a resume operation should be attempted during a system restart. The element data format is BcdBooleanElement.
			/// </summary>
			BcdBootMgrBoolean_AttemptResume = 0x26000005,
			/// <summary>
			/// The resume application object. The element data format is BcdObjectElement.
			/// </summary>
			BcdBootMgrObject_ResumeObject = 0x23000006,
			/// <summary>
			/// The boot manager tools display order list. The element data format is BcdObjectListElement.
			/// </summary>
			BcdBootMgrObjectList_ToolsDisplayOrder = 0x24000010,
			/// <summary>
			/// The device on which the boot application resides. The element data format is BcdDeviceElement.
			/// </summary>
			BcdBootMgrDevice_BcdDevice = 0x21000022,
			/// <summary>
			/// The boot application. The element data format is BcdStringElement.
			/// </summary>
			BcdBootMgrString_BcdFilePath = 0x22000023
		}

		/// <summary>
		/// Specifies the safe boot options.
		/// </summary>
		public enum BcdLibrary_SafeBoot : uint
		{
			/// <summary>
			/// Load the drivers and services specified by name or group under the following registry key: HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal.
			/// </summary>
			SafemodeMinimal = 0,
			/// <summary>
			/// Load the drivers and services specified by name or group under the following registry key: HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network
			/// </summary>
			SafemodeNetwork = 1,
			/// <summary>
			/// Boot the system into a repair mode that restores the Active Directory service from backup medium.
			/// </summary>
			SafemodeDsRepair = 2
		}

		/// <summary>
		/// Specifies the library element types. Library elements are available to all objects.
		/// </summary>
		public enum BcdLibraryElementTypes : uint
		{
			/// <summary>
			/// Device on which a boot environment application resides. The element data format is BcdDeviceElement.
			/// </summary>
			BcdLibraryDevice_ApplicationDevice = 0x11000001,
			/// <summary>
			/// Path to a boot environment application. The element data format is BcdStringElement.
			/// </summary>
			BcdLibraryString_ApplicationPath = 0x12000002,
			/// <summary>
			/// Display name of the boot environment application. The element data format is BcdStringElement.
			/// </summary>
			BcdLibraryString_Description = 0x12000004,
			/// <summary>
			/// Preferred locale, in RFC 3066 format. The element data format is BcdStringElement.
			/// </summary>
			BcdLibraryString_PreferredLocale = 0x12000005,
			/// <summary>
			/// List of BCD objects from which the current object should inherit elements. The element data format is BcdObjectListElement.
			/// </summary>
			BcdLibraryObjectList_InheritedObjects = 0x14000006,
			/// <summary>
			/// Maximum physical address a boot environment application should recognize. All memory above this address is ignored. The element data format is BcdIntegerElement.
			/// </summary>
			BcdLibraryInteger_TruncatePhysicalMemory = 0x15000007,
			/// <summary>
			/// List of boot environment applications to be executed if the associated application fails. The applications are executed in the order they appear in this list. The element data format is BcdObjectListElement.
			/// </summary>
			BcdLibraryObjectList_RecoverySequence = 0x14000008,
			/// <summary>
			/// Indicates whether the recovery sequence executes automatically if the boot application fails. Otherwise, the recovery sequence only runs on demand. The element data format is BcdBooleanElement.
			/// </summary>
			BcdLibraryBoolean_AutoRecoveryEnabled = 0x16000009,
			/// <summary>
			/// List of page frame numbers describing faulty memory in the system. The element data format is BcdIntegerListElement.
			/// </summary>
			BcdLibraryIntegerList_BadMemoryList = 0x1700000a,
			/// <summary>
			/// If TRUE, indicates that a boot application can use memory listed in the BcdLibraryIntegerList_BadMemoryList. The element data format is BcdBooleanElement.
			/// </summary>
			BcdLibraryBoolean_AllowBadMemoryAccess = 0x1600000b,
			/*
			/// <summary>
			/// Indicates how the first megabyte of memory is to be used. The element data format is BcdIntegerElement. The following are the possible values.
			/// Term								Description
			/// FirstMegabytePolicyUseNone (0)		Use none of the first megabyte of memory.
			/// FirstMegabytePolicyUseAll (1)		Use all of the first megabyte of memory.
			/// FirstMegabytePolicyUsePrivate (2)	Reserved for future use.
			/// </summary>
			BcdLibraryInteger_FirstMegabytePolicy = 0x15000000c,
			*/
			/// <summary>
			/// Indicates whether the boot debugger should be enabled. The element data format is BcdBooleanElement.
			/// </summary>
			BcdLibraryBoolean_DebuggerEnabled = 0x16000010,
			/// <summary>
			/// Debugger type. The element data format is BcdIntegerElement and the Integer property is one of the values from the BcdLibrary_DebuggerType enumeration.
			/// </summary>
			BcdLibraryInteger_DebuggerType = 0x15000011,
			/// <summary>
			/// I/O port address for the serial debugger. The element data format is BcdIntegerElement.
			/// </summary>
			BcdLibraryInteger_SerialDebuggerPortAddress = 0x15000012,
			/// <summary>
			/// Serial port number for serial debugging. The element data format is BcdIntegerElement. If this value is not specified, the default is specified by the DBGP ACPI table settings.
			/// </summary>
			BcdLibraryInteger_SerialDebuggerPort = 0x15000013,
			/// <summary>
			/// Baud rate for serial debugging. The element data format is BcdIntegerElement. If this value is not specified, the default is specified by the DBGP ACPI table settings.
			/// </summary>
			BcdLibraryInteger_SerialDebuggerBaudRate = 0x15000014,
			/// <summary>
			/// Channel number for 1394 debugging. The element data format is BcdIntegerElement.
			/// </summary>
			BcdLibraryInteger_1394DebuggerChannel = 0x15000015,
			/// <summary>
			/// The target name for the USB debugger. The target name is arbitrary but must match between the debugger and the debug target. The element data format is BcdStringElement.
			/// </summary>
			BcdLibraryString_UsbDebuggerTargetName = 0x12000016,
			/// <summary>
			/// If TRUE, the debugger will ignore user mode exceptions and only stop for kernel mode exceptions. The element data format is BcdBooleanElement.
			/// </summary>
			BcdLibraryBoolean_DebuggerIgnoreUsermodeExceptions = 0x16000017,
			/// <summary>
			/// Indicates the debugger start policy. The element data format is BcdIntegerElement. The following are the possible values.
			/// Term							Description
			/// DebuggerStartActive (0)			The debugger will start active.
			/// DebuggerStartAutoEnable (1)		The debugger will start in the auto-enabled state. If a debugger is attached it will be used; otherwise the debugger port will be available for other applications.
			/// DebuggerStartDisable (2)		The debugger will not start.
			/// </summary>
			BcdLibraryInteger_DebuggerStartPolicy = 0x15000018,
			/// <summary>
			/// Indicates whether EMS redirection should be enabled. The element data format is BcdBooleanElement.
			/// </summary>
			BcdLibraryBoolean_EmsEnabled = 0x16000020,
			/// <summary>
			/// COM port number for EMS redirection. The element data format is BcdIntegerElement. If this value is not specified, the default is specified by the SPCR ACPI table settings.
			/// </summary>
			BcdLibraryInteger_EmsPort = 0x15000022,
			/// <summary>
			/// Baud rate for EMS redirection. The element data format is BcdIntegerElement.
			/// </summary>
			BcdLibraryInteger_EmsBaudRate = 0x15000023,
			/// <summary>
			/// String that is appended to the load options string passed to the kernel to be consumed by kernel-mode components. This is useful for communicating with kernel-mode components that are not BCD-aware. The element data format is BcdStringElement.
			/// </summary>
			BcdLibraryString_LoadOptionsString = 0x12000030,
			/// <summary>
			/// Indicates whether the advanced options boot menu (F8) is displayed. The element data format is BcdBooleanElement.
			/// </summary>
			BcdLibraryBoolean_DisplayAdvancedOptions = 0x16000040,
			/// <summary>
			/// Indicates whether the boot options editor is enabled. The element data format is BcdBooleanElement.
			/// </summary>
			BcdLibraryBoolean_DisplayOptionsEdit = 0x16000041,
			/// <summary>
			/// Indicates whether graphics mode is disabled and boot applications must use text mode display. The element data format is BcdBooleanElement.
			/// </summary>
			BcdLibraryBoolean_GraphicsModeDisabled = 0x16000046,
			/// <summary>
			/// Indicates the access policy for PCI configuration space. The element data format is BcdIntegerElement. The following are the possible values.
			/// Term									Description
			/// ConfigAccessPolicyDefault (0)			Access to PCI configuration space through the memory-mapped region is allowed.
			/// ConfigAccessPolicyDisallowMmConfig (1)	Access to PCI configuration space through the memory-mapped region is not allowed. This setting is used for platforms that implement memory-mapped configuration space incorrectly. The CFC/CF8 access mechanism can be used to access configuration space on these platforms.
			/// </summary>
			BcdLibraryInteger_ConfigAccessPolicy = 0x15000047,
			/// <summary>
			/// Indicates whether the test code signing certificate is supported. The element data format is BcdBooleanElement.
			/// </summary>
			BcdLibraryBoolean_AllowPrereleaseSignatures = 0x16000049
		}

	}
}
